perm filename NEWDLI[E,ALS] blob
sn#261614 filedate 1977-02-02 generic text, type C, neo UTF8
COMMENT ā VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 NEWDLI NEWD1 NEWD2 NEWD3 NEWD4 NEWD5
C00007 00003 ABREV NDSAIL NDSA0 NDSA1 NDSA2 NDSA3
C00009 00004 NDSA4 NDSA5 NDSA6 NDSA7 NDSA8 NDSA9 NDSA9A NDSA9B NDSA10 NDSA11 NDS11A NDSA12 NDSA13 NDSA14 NDSA15 NDSA16
C00012 ENDMK
Cā;
;NEWDLI NEWD1 NEWD2 NEWD3 NEWD4 NEWD5
;Routine to initiate and link new line
NEWDLS: PUSHJ P,ENDSET ;To guarentee that new line will be at the end of FS
TLO F,NOCHK ;Don't CORE DOWN untill through
MOVEI A,1
PUSHJ P,SETARR
TRO F,UPDTXT ;This is the first line on the page
MOVEI B,PAGE ;Start at top of page
HRRZ H,FSEND
ADDI H,1
HRRZ T,(B)
HLLZ Q,TXTFLG(T) ;Save flags
LEG HLLM Q,TXTFLG(H)
HRRZS TXTFLG(T) ;No longer the first line
AOS TT,TXTNUM
LEG HRRM TT,TXTSER(H) ;Assign H new serial number
MOVEM TT,SRCNUM
HRRZ T,(B) ;Link up new area as first line on page
HRRM T,(H)
HRLM B,(H)
HRLM H,(T)
HRRM H,PAGE
HRRZM H,ARRLIN
HRRZM H,WINLIN
MOVE I,H
ADD H,[440700,,LLDESC] ;Pointer for depositing text
MOVEI E,40
SETZB Q,G ;Q counts labels, G counts characters
HRRZ B,(I) ;Start on old first line
POPJ P,
;This code generates a new first line, listing all labels (in SAIL format)
NEWDLI: PUSHJ P,NEWDLS ;Start set-up
MOVEI C,73 ;Start with a ;
LEG IDPB C,H
NEWD1: MOVSI T,-10
MOVE D,B
ADD D,[440700,,LLDESC]
NEWD2: MOVEM D,DSAVE#
ILDB C,D
CAIE C,40
CAIN C,11
JRST NEWD2 ;Ignore initial spaces and TABS
SKIPA
NEWD3: ILDB C,D ;Check line for a label
CAIN C,72 ;Is it a colon?
AOJA Q,NEWD5 ;Go copy this label
CAIE C,15 ;Are we at the end of the line?
CAIN C,73 ;Is it a semicolon?
SKIPA
AOBJN T,NEWD3
NEWD4: HRRZ B,(B) ;Go to the next line
CAIE B,BOTSTR
JRST NEWD1 ;and try again
NEWD4A: LDB C,H
CAIE C,40
AOJA G,.+2 ;Initial semicolon or space was not counted
ADD H,[70000,,0] ;Overwrite last space which was counted
MOVEI C,15
LEG IDPB C,H
MOVEI C,12
LEG IDPB C,H
TDZA C,C
LEG IDPB C,H ;And a null
TLNE H,760000
JRST .-2
MOVSI TT,2(G) ;2 for CRLF + char. count
ADDI TT,(G) ;but only char. count into right half
MOVEM TT,TXTCNT(I) ;Record char counts
AOS LINES ;Add to line count
HLRZ T,TXTCNT(I)
ADDM T,CHARS ;Add to char count
MOVE T,I ;Display text must be in ASCID
ADDI T,LLDESC ;Get address of first text word
MOVEI TT,1
IORM TT,(T) ;Convert to ASCID
CAIGE T,(H)
AOJA T,.-2
MOVEI TT,2(H)
MOVSI T,TXTCOD
FSFIX TT,T
PUSHJ P,ENDFIX
TLZ F,NOCHK
PUSHJ P,LINSET
PUSHJ P,SETWRT
SETZM TYOPNT
HRRZ T,TXTCNT(I)
OUTSTR [ASCIZ/
The new line lists /]
TYPDEC Q
OUTSTR [ASCIZ/ labels, in /]
TYPDEC T
OUTSTR [ASCIZ/ characters. /]
JRST POPJ1
NEWD5: MOVE D,DSAVE ;Go back and copy this label
HRRZS T
ILDB C,D
LEG IDPB C,H
AOS G
SOJG T,.-3
LEG IDPB E,H
AOJA G,NEWD4
;Forces 2 letters for the NEWDLINE command
NOGOOD: SORRY NOGOOD is N.G.
JRST POPJ1
;ABREV NDSAIL NDSA0 NDSA1 NDSA2 NDSA3
IMPURE
ABREV: ASCII/PROCEDURE/
ASCII/RECORD_CLA/
ASCII/RECORD!CLA/
PURE
;This code generates a new first line, for Sail programs
NDSAIL: SETZM TYIPNT ;First read any defined words to replace usual names
MOVSI T,-3 ;3 permitted
PUSHJ P,TYI
JRST NDSA4 ;Use standard names
CAIE C,40
CAIN C,11
JRST .-4 ;Ignore initial spaces and tabs
NDSA0: MOVE D,[440700,,BUF]
MOVSI B,12 ;Allow only 10 characters
SETZM BUF
SETZM BUF+1
CAIE C,","
JRST NDSA1
AOS T
AOBJN T,NDSA0 ;Use default
JRST NDSA4 ;No more allowed
NDSA1: CAIL C,140
CAILE C,172
SKIPA
SUBI C,40 ;Make upper case
IDPB C,D
NDSA2: PUSHJ P,TYI ;Now read string
JRST NDSA3
CAIE C,","
AOBJN B,NDSA1
NDSA3: MOVE D,BUF
MOVEM D,ABREV(T)
MOVE D,BUF+1
MOVEM D,ABREV+1(T)
CAIN C,15
JRST NDSA4
AOS T
AOBJN T,NDSA0
;NDSA4 NDSA5 NDSA6 NDSA7 NDSA8 NDSA9 NDSA9A NDSA9B NDSA10 NDSA11 NDS11A NDSA12 NDSA13 NDSA14 NDSA15 NDSA16
NDSA4: PUSHJ P,NEWDLS ;Start set-up
MOVE C,[ASCII/BEGIN/]
MOVEM C,(H)
ADDI H,1 ;One whole word
MOVEI C,40
IDPB C,H
MOVEI G,5 ;Do not count space now
SETZ Q, ;To count words
NDSA5: MOVE D,B
ADD D,[440700,,LLDESC]
NDSA6: MOVEM D,DSAVE
ILDB C,D
CAIE C,40
CAIN C,11
JRST NDSA6 ;Ignore spaces and tabs
NDSA7: SETZM BUF
SETZM BUF+1
MOVE E,[440700,,BUF]
MOVSI T,-12 ;Use 10 characters for test
SKIPA
NDSA8: ILDB C,E
CAIE C,40
CAIN C,11
JRST NDSA9
CAIE C,";"
CAIN C,15
JRST NDSA16 ;Go to next line
CAIL C,140
CAILE C,172
SKIPA
SUBI C,40 ;Make upper case
IDPB C,E
AOBJN T,NDSA8
NDSA9: MOVSI T,-3
NDSA9A: MOVE C,BUF
CAIE C,ABREV(T)
JRST NDSA9B
MOVE C,BUF+1
CAIN C,ABREV+1(T)
AOJA Q,NDS11A ;A match
NDSA9B: AOS T
AOBJN T,NDSA9A
MOVE D,DSAVE ;May be modifier, eat word and try again
NDSA10: ILDB C,D
CAIE C,40
CAIN C,11
JRST NDSA6 ;At end of word
CAIE C,";"
CAIN C,15
JRST NDSA16
JRST NDSA10 ;Still more chars
NDSA11: MOVE C,BUF+1
CAIN C,ABREV+1
JRST NDS11A
CAIE C,ABREV+3
CAIN C,ABREV+5
JRST NDS11A
JRST NDSA9A
NDS11A: MOVE D,DSAVE ;Eat this word and report the next one
NDSA12: ILDB C,D
CAIE C,40
CAIN C,11
JRST NDSA13 ;At end of word
CAIE C,";"
CAIN C,15
JRST NDSA16
JRST NDSA10 ;Still more chars
NDSA13: ILDB C,D
CAIE C,40
CAIN C,11
JRST NDSA13 ;Ignore spaces here
SKIPA
NDSA14: ILDB C,D
CAIE C,";"
CAIN C,15
JRST NDSA15
CAIE C,"("
CAIN C,40
JRST NDSA15
IDPB C,H
AOJA G,NSA14
JRST NDSA14
NDSA15: MOVEI C,40
IDPB C,H
AOS G
NDSA16: HRRZ B,(B)
CAIE B,BOTSTR
JRST NDSA5
MOVEI C,";"
DPB C,H
JRST NEWD4A